/*
 * JDBCRevistaDAO.java
 *
 * Created on 22 de Julho de 2007, 13:00
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package br.usp.poli.mfc.struts.DAO.JDBC;

import br.usp.poli.mfc.struts.DAO.RevistaDAO;
import br.usp.poli.mfc.struts.bean.Revista;
import br.usp.poli.mfc.struts.bean.RevistaxGenero;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;


/**
 *
 * @author Renato
 */
public class JDBCRevistaDAO implements RevistaDAO{
    
    /** Creates a new instance of JDBCRevistaDAO */
    public JDBCRevistaDAO() {
    }
    
    public ResultSet getGenero(){
        java.sql.Connection Conn;
        PreparedStatement ps;
        ResultSet rs = null;
        try{
            Conn = JDBCUtil.getConnection();
            String query = "select * from \"ADMIN\".\"GENERO\"";
            ps = Conn.prepareStatement(query);
            rs = ps.executeQuery();
        } catch(Exception e){
            System.out.println("****SQL EXCEPTION @ getGenero****");
            e.printStackTrace();
        }
        return rs;
    }
    
    public boolean getRevista(Revista _revista){
        return true;
    }
    
    public Revista getRevistaByID(int idRevista, boolean foo) {
        Connection conn;
        PreparedStatement ps;
        ResultSet rs;
        Revista ret = null;
        if(idRevista < 0) return null;
        /* O resto do codigo vai aqui */
        try {
            conn = JDBCUtil.getConnection();
            String query = "select * from \"ADMIN\".\"REVISTA\" where IDREVISTA = " + idRevista;
            ps = conn.prepareStatement(query);
            rs = ps.executeQuery();
            while(rs.next()) {
                ret = new Revista();
                ret.setTitulo(rs.getString("NOME_REVISTA"));
                ret.setDatapublicacao(new Date(rs.getDate("DT_PUBLICACAO_REVISTA").getTime()));
                ret.setDescricao(rs.getString("DESCRICAO_REVISTA"));
                ret.setIDRevista(rs.getInt("IDREVISTA"));
                ret.setIDGenero(rs.getInt("IDGENERO"));
            }
            conn.close();
        } catch (SQLException e) {
            System.out.println("***SQL EXCEPTION @ getRevistaById***");
            e.printStackTrace();
        }
        return ret;
    }
    
    public RevistaxGenero getRevistaByID(int _idRevista){
        Connection Conn;
        PreparedStatement ps = null;
        ResultSet rs = null;
        RevistaxGenero _viewRevista = new RevistaxGenero();
        try{
            Conn = JDBCUtil.getConnection();
            String query = "select a.IDREVISTA, a.NOME_REVISTA, a.DESCRICAO_REVISTA, a.DT_PUBLICACAO_REVISTA, b.NOME_GENERO from \"ADMIN\".\"REVISTA\" a "
                    + "inner join \"ADMIN\".\"GENERO\" b on a.IDGENERO = b.IDGENERO where  a.IDREVISTA = " + _idRevista;
            ps = Conn.prepareStatement(query);
            rs = ps.executeQuery();
            while(rs.next()){
                String _date = rs.getDate("DT_PUBLICACAO_REVISTA").toString();
                String _datex = _date.substring(8,10) + "-" + _date.substring(5,7) + "-" + _date.substring(0,4);
                _viewRevista.setIDRevista(rs.getInt("IDREVISTA"));
                _viewRevista.setTitulo(rs.getString("NOME_REVISTA"));
                _viewRevista.setGenero(rs.getString("NOME_GENERO"));
                _viewRevista.setDescricao(rs.getString("DESCRICAO_REVISTA"));
                _viewRevista.setDatapublicacao(_datex);
            }
            return _viewRevista;
        } catch(Exception e){
            System.out.println("****SQL EXCEPTION @ getRevistaByID****");
            e.printStackTrace();
        }
        return _viewRevista;
    }
    
    public boolean InsereRevista(Revista _revista) {
        Connection Conn;
        PreparedStatement ps = null;
        //ResultSet rs;
        try{
            Conn = JDBCUtil.getConnection();
            Calendar c = Calendar.getInstance();
            c.setTime(_revista.getDatapublicacao());
            String query = "insert into \"ADMIN\".\"REVISTA\" (\"NOME_REVISTA\", \"DESCRICAO_REVISTA\", \"DT_PUBLICACAO_REVISTA\", \"IDGENERO\") "
                    + " values( '" + _revista.getTitulo() + "', '" + _revista.getDescricao() + "', DATE('" + c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1)  + "-" + c.get(Calendar.DAY_OF_MONTH) + "'), "
                    + _revista.getIDGenero() + ")";
            ps = Conn.prepareStatement(query);
            return (ps.execute());
        } catch(Exception e){
            System.out.println("****SQL EXCEPTION @ InsereRevista****");
            e.printStackTrace();
        }
        return false;
    }
    
    public ResultSet getRevistasByGenero(int _intIDGenero){
        Connection Conn;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try{
            Conn = JDBCUtil.getConnection();
            String query = "select a.NOME_REVISTA, b.DT_ENTREGA, b.DT_RECEBIMENTO, c.NOME_USUARIO from \"ADMIN\".\"REVISTA\" a "
                    + "inner join \"ADMIN\".\"LISTA\" b on a.IDREVISTA = b.IDREVISTA "
                    + "inner join \"ADMIN\".\"USUARIO\" c on b.IDUSUARIO = c.IDUSUARIO "
                    + "where a.IDGENERO = " + _intIDGenero;
            ps = Conn.prepareStatement(query);
            rs = ps.executeQuery();
        } catch(Exception e){
            System.out.println("****SQL EXCEPTION @ getRevistasByGenero****");
            e.printStackTrace();
        }
        return rs;
    }
    
     public ResultSet getRevistasByUsuario(int _idUsuario){
        Connection Conn;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try{
            Conn = JDBCUtil.getConnection();
            String query = "select a.NOME_REVISTA, b.DT_ENTREGA, b.DT_RECEBIMENTO from \"ADMIN\".\"REVISTA\" a "
                    + "inner join \"ADMIN\".\"LISTA\" b on a.IDREVISTA = b.IDREVISTA "
                    + "inner join \"ADMIN\".\"USUARIO\" c on b.IDUSUARIO = c.IDUSUARIO "
                    + "where c.IDUSUARIO = " + _idUsuario;
            System.out.println(query);
            ps = Conn.prepareStatement(query);
            rs = ps.executeQuery();
        } catch(Exception e){
            System.out.println("****SQL EXCEPTION @ getRevistasByUsuario****");
            e.printStackTrace();
        }
        return rs;
    }
        
    public ArrayList<Revista> getNomeRevista(String _nomerevista){
        Connection Conn;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String query = null;
        ArrayList<Revista> _arrayrevista = null;
        try{
            Conn = JDBCUtil.getConnection();
            if(_nomerevista == null){
                query  = "Select * from \"ADMIN\".\"REVISTA\"";
            } else{
                query = "Select * from \"ADMIN\".\"REVISTA\" where NOME_REVISTA like '%" + _nomerevista + "%'";
            }
            ps = Conn.prepareStatement(query);
            rs = ps.executeQuery();
            _arrayrevista = new ArrayList<Revista>();
            while(rs.next()){
                Revista _revista = new Revista();
                _revista.setIDRevista(rs.getInt("IDREVISTA"));
                _revista.setTitulo(rs.getString("NOME_REVISTA"));
                _arrayrevista.add(_revista);
            }
        } catch(Exception e){
            System.out.println("***SQL EXCEPTION @ getNomeRevista****");
            e.printStackTrace();
        }
        return _arrayrevista;
    }
    
    public boolean deleteRevistaByID(int _idrevista){
        Connection Conn;
        PreparedStatement ps = null;
        String query = null;
        boolean retorno = false;
        try{
            Conn = JDBCUtil.getConnection();
            query  = "delete from \"ADMIN\".\"REVISTA\" where IDREVISTA = " + _idrevista;
            System.out.println("query: " + query);
            ps = Conn.prepareStatement(query);
            retorno = !ps.execute();
        } catch(Exception e){
            System.out.println("***SQL EXCEPTION @ deleteRevistaByID****");
            e.printStackTrace();
        }
        return retorno;
    }
    
    public boolean alteraRevistaByID(RevistaxGenero _RevistaxGenero){
        Connection Conn;
        PreparedStatement ps = null;
        boolean retorno = false;
        //Calendar c = Calendar.getInstance();
        //c.setTime(_RevistaxGenero.getDatapublicacao());
        try{
            Conn = JDBCUtil.getConnection();
            String _date = _RevistaxGenero.getDatapublicacao();
            String _dataPublicacao = _date.substring(6,10) + "-" + _date.substring(3,5) + "-" + _date.substring(0,2);
            String query = "update \"ADMIN\".\"REVISTA\" set"
                    + " NOME_REVISTA = '" + _RevistaxGenero.getTitulo()
                    + "', DESCRICAO_REVISTA = '" + _RevistaxGenero.getDescricao()
                    + "', DT_PUBLICACAO_REVISTA = DATE('" + _dataPublicacao
                    + "'), IDGENERO = " + _RevistaxGenero.getIDGenero()
                    + " where IDREVISTA = " + _RevistaxGenero.getIDRevista();
            ps = Conn.prepareStatement(query);
            retorno = !ps.execute();
        } catch(Exception e){
            System.out.println("***SQL EXCEPTION @ alteraRevistaByID****");
            e.printStackTrace();
        }
        return retorno;
    }
}
